
'use strict';

const db = uniCloud.database();
const dbcmd = db.command;

const utils = {
	// 获取消息类型
	async get_message(scene) {
		const messageRes = await db.collection('usemall-message-type').where({
			state: 1,
			scene: scene
		}).get();
		
		const [message] = messageRes.data;
		
		return message;
	},
	
	// 获取消息通知者
	async get_message_uids(message) {
		
		// 获取消息已配置角色权限的 角色ID
		const roleRes = await db.collection('uni-id-roles').where({
			permission: message.message_id
		}).field({
			permission: false
		}).get();
		
		const roleIds = [];
		const roles = roleRes.data || [];
		
		roleIds.push('admin');
		if (roles && roles.length) {
			roles.forEach(x => {
				roleIds.push(x.role_id);
			})
		}
		
		// 根据角色ID获取用户列表
		const userRes = await db.collection('uni-id-users').where({
			role: dbcmd.in(roleIds)
		}).field({
			role: true
		}).get();
		
		const users = userRes.data;
		const uids = users.map(x => x._id);
		
		// 返回消息通知者 uids
		return uids;
	},
	
	/**
	 * 日期格式化，默认为 'yyyy-MM-dd hh:mm:ss'
	 */
	formatdate(date, fmt) {
		date = this.toDate(date);
	
		fmt = fmt || 'yyyy-MM-dd hh:mm:ss'
		let o = {
			"M+": date.getMonth() + 1, //月份
			"d+": date.getDate(), //日
			"h+": date.getHours(), //小时
			"m+": date.getMinutes(), //分
			"s+": date.getSeconds(), //秒
			"q+": Math.floor((date.getMonth() + 3) / 3), //季度
			"S": date.getMilliseconds() //毫秒
		};
	
		if (/(y+)/.test(fmt))
			fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
		for (let k in o)
			if (new RegExp("(" + k + ")").test(fmt))
				fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
		return fmt;
	},
	
	/**
	 * 将日期格式转换为 new Date()
	 */
	toDate(date) {
		if (typeof date === 'string') {
			date = date.replace(/\.|\-/g, '/');
		}
		if (typeof date !== 'object') {
			date = new Date(date);
		}
		
		return date;
	},
	
	/**
	 * 将 UTC+0 转换为 UTC+8
	 */
	toDateUTC8(date) {
		date = this.toDate(date);
		if (uniCloud.$provider == 'alipay') {
			// 支付宝云，默认为 UTC+8
			return date;
		}
		
		// 小时 UTC+0 转换为 UTC+8
		date.setHours(date.getHours() + 8);
		return date;
	}
	
}

module.exports = utils;